#!/bin/bash

# 配置参数
LIMIT_VALUE=100000
CONF_LINE="* - nofile $LIMIT_VALUE"
CONF_DIR="/etc/security/limits.d"
CONF_FILE="$CONF_DIR/90-nofile.conf"
MAIN_CONF="/etc/security/limits.conf"

# 1. 优先使用limits.d目录
if [ -d "$CONF_DIR" ]; then
    # 清理旧配置（如果存在）
    rm -f "$CONF_FILE"
    # 写入新配置
    echo "$CONF_LINE" > "$CONF_FILE"
    echo "[成功] 配置已写入: $CONF_FILE"
    
# 2. 回退到limits.conf文件
else
    # 清理旧配置（兼容旧格式）
    sed -i '/^\*\([[:space:]]\+hard\|[[:space:]]\+-\|[[:space:]]\+soft\)[[:space:]]\+nofile/d' "$MAIN_CONF"
    # 追加新配置
    echo "$CONF_LINE" >> "$MAIN_CONF"
    echo "[成功] 配置已写入: $MAIN_CONF"
fi

# 3. 系统级配置 (sysctl)
SYSCTL_CONF="/etc/sysctl.conf"
SYSCTL_KEY="fs.file-max"
if grep -q "^$SYSCTL_KEY" "$SYSCTL_CONF"; then
    sed -i "s/^$SYSCTL_KEY.*/$SYSCTL_KEY = $LIMIT_VALUE/" "$SYSCTL_CONF"
else
    echo "$SYSCTL_KEY = $LIMIT_VALUE" >> "$SYSCTL_CONF"
fi

# 4. 应用sysctl配置
sysctl -p "$SYSCTL_CONF" >/dev/null 2>&1

echo "文件描述符限制已设置为 $LIMIT_VALUE"
echo "注意：需要重新登录使用户限制生效"